home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amoszine 6
/
Amoszine 6 (Disk 2 of 2).adf
/
paul_nordovics.lha
/
P_Nordovics
/
mapper.AMOS
/
mapper.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1992-02-26
|
7KB
|
287 lines
' *************************************************************
'
' MAPPER
' ======
'
' Where All Great Games Are Made!
'
' /\/\/\/\/\/\/\/\/\
' By: Paul Nordovics
' \/\/\/\/\/\/\/\/\/
'
' Gives You Some Idea How A Mapper Is Written
'
' Use Keys:
'
' F1 = Next Level
' F2 = Previous Level
' F3 = Clear Screen
' F4 = Clear Current Map Block Position
' F5 = Fill Screen With Current Map Block
' F6 = Change Wall Blocks To Current Map Block
' F7 = Change Floor Blocks To Current Map Block
' F9 = Load Map Data (disabled)
' F10 = Save Map Data (disabled)
' Cursor Up = Next Map Block
' Cursor Down = Previous Map Block
' Fire(Joy 1) = Put Block
'
' It's A Bit Slooooowwww!!! (I compiled "Proper" Version)
'
' *************************************************************
'
' *****************
' make enough space
' *****************
Set Buffer 50
'
' ***********
' set up vars
' ***********
Global _CURS_X,_CURS_Y,DELAY,BLOCK_IMAGE
_CURS_X=0 : _CURS_Y=0
DELAY=20
BLOCK_IMAGE=1
Dim MAP(20,260)
Global MAP(),ARRAY_X,ARRAY_Y,LEVEL
ARRAY_X=0 : ARRAY_Y=0
'
' *************
' set up screen
' *************
LEVEL=0
_SHOW_MAP
Locate 0,27 : Print "LEVEL:";LEVEL;
Locate 6,28 : Print " "
Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
Paste Bob 96,210,BLOCK_IMAGE
'
' -------------------------------------------------------------
'
' *************************************************************
' main loop
' *************************************************************
Do
MOVE_CURSOR
_FN_KEYS
Loop
'
' -------------------------------------------------------------
'
Procedure MOVE_CURSOR
If Jup(1)
Add _CURS_Y,-16 : Add ARRAY_Y,-1
If _CURS_Y<0
_CURS_Y=0 : ARRAY_Y=LEVEL*13
End If
Wait DELAY
End If
If Jdown(1)
Add _CURS_Y,16 : Add ARRAY_Y,1
If _CURS_Y>192
_CURS_Y=192 : ARRAY_Y=(LEVEL*13)+12
End If
Wait DELAY
End If
If Jright(1)
Add _CURS_X,16 : Add ARRAY_X,1
If _CURS_X>304
_CURS_X=304 : ARRAY_X=19
End If
Wait DELAY
End If
If Jleft(1)
Add _CURS_X,-16 : Add ARRAY_X,-1
If _CURS_X<0
_CURS_X=0 : ARRAY_X=0
End If
Wait DELAY
End If
Bob 0,_CURS_X,_CURS_Y,Length(1)-1
If Fire(1)
Cls 0,_CURS_X,_CURS_Y To _CURS_X+16,_CURS_Y+16
Paste Bob _CURS_X,_CURS_Y,BLOCK_IMAGE
MAP(ARRAY_X,ARRAY_Y)=BLOCK_IMAGE
End If
End Proc
Procedure _FN_KEYS
' ***************
' CHANGE BLOCK UP
' ***************
If Key State($4C)
Inc BLOCK_IMAGE
If BLOCK_IMAGE>Length(1)-1
BLOCK_IMAGE=Length(1)-1
End If
Locate 7,28 : Print " "
Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
Cls 0,96,210 To 112,226
Paste Bob 96,210,BLOCK_IMAGE
End If
' *****************
' CHANGE BLOCK DOWN
' *****************
If Key State($4D)
Dec BLOCK_IMAGE
If BLOCK_IMAGE<1
BLOCK_IMAGE=1
End If
Locate 7,28 : Print " "
Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
Cls 0,96,210 To 112,226
Paste Bob 96,210,BLOCK_IMAGE
End If
' ********
' LEVEL UP
' ********
If Key State($50)
Inc LEVEL
Add ARRAY_Y,13
If LEVEL>19
LEVEL=19
Add ARRAY_Y,-13
End If
_SHOW_MAP
Locate 0,27 : Print "LEVEL:";LEVEL;
Locate 7,28 : Print " "
Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
Paste Bob 96,210,BLOCK_IMAGE
End If
' **********
' LEVEL DOWN
' **********
If Key State($51)
Dec LEVEL
Add ARRAY_Y,-13
If LEVEL<0
LEVEL=0
Add ARRAY_Y,13
End If
_SHOW_MAP
Locate 0,27 : Print "LEVEL:";LEVEL;
Locate 7,28 : Print " "
Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
Paste Bob 96,210,BLOCK_IMAGE
End If
' ************
' CLEAR SCREEN
' ************
If Key State($52)
For D=LEVEL*13 To(LEVEL*13)+12
For A=0 To 19
MAP(A,D)=0
Next A
Next D
_SHOW_MAP
End If
' ***********
' CLEAR BLOCK
' ***********
If Key State($53)
Cls 0,_CURS_X,_CURS_Y To _CURS_X+16,_CURS_Y+16
MAP(ARRAY_X,ARRAY_Y)=0
End If
' *****************************
' CLEAR SCREEN TO CURRENT BLOCK
' *****************************
If Key State($54)
For D=LEVEL*13 To(LEVEL*13)+12
For A=0 To 19
MAP(A,D)=BLOCK_IMAGE
Next A
Next D
_SHOW_MAP
End If
' ***********************************
' CHANGE WALL BLOCKS TO CURRENT BLOCK
' ***********************************
If Key State($56)
For D=LEVEL*13 To(LEVEL*13)+12
For A=0 To 19
If MAP(A,D)>61
MAP(A,D)=BLOCK_IMAGE
End If
Next A
Next D
_SHOW_MAP
End If
' ************************************
' CHANGE FLOOR BLOCKS TO CURRENT BLOCK
' ************************************
If Key State($57)
For D=LEVEL*13 To(LEVEL*13)+12
For A=0 To 19
If MAP(A,D)>18 and MAP(A,D)<62
MAP(A,D)=BLOCK_IMAGE
End If
Next A
Next D
_SHOW_MAP
End If
' *******************
' LOAD DATA FROM DISK
' *******************
If Key State($58)
'_LOAD_DATA
End If
' *****************
' SAVE DATA TO DISC
' *****************
If Key State($59)
'_SAVE_DATA
End If
End Proc
Procedure _SHOW_MAP
Screen Close 0
Screen Open 0,320,256,16,Lowres
Curs Off : Flash Off : Hide
Get Sprite Palette
Screen Hide
Colour 0,$0
Cls 0
Paper 0 : Pen 3
Y=0
For D=LEVEL*13 To(LEVEL*13)+12
X=0
For A=0 To 19
If MAP(A,D)>0
Paste Bob X,Y,MAP(A,D)
End If
Add X,16
Next A
Add Y,16
Next D
Locate 0,27 : Print "LEVEL:";LEVEL;
Locate 6,28 : Print " "
Locate 0,28 : Print "BLOCK:";BLOCK_IMAGE;
Paste Bob 96,210,BLOCK_IMAGE
Double Buffer
Screen Show
End Proc
Procedure _SAVE_DATA
Open Random 1,"df0:Map_data"
Field 1,4 As D$
R=(LEVEL*260)+1
For D=LEVEL*13 To(LEVEL*13)+12
For A=0 To 19
D$=Str$(MAP(A,D))
Put 1,R
Inc R
Next A
Next D
Close 1
End Proc
Procedure _LOAD_DATA
Open Random 1,"df0:Map_data"
Field 1,4 As D$
R=(LEVEL*260)+1
For D=LEVEL*13 To(LEVEL*13)+12
For A=0 To 19
Get 1,R
MAP(A,D)=Val(D$)
Inc R
Next A
Next D
Close 1
_SHOW_MAP
End Proc